package com.cskaoyan.javase.oop2._1extends._6restriction;
/**
 * 在前面，继承的定义中
 * 我们说子类会继承父类的所有成员，那么思考以下问题：
 *
 * 1.父类中的私有成员能够继承吗?
 *  是可以继承的,但是没有访问权限,只能间接的去访问它,不能直接访问.
 *
 *  2.父类中的静态成员能够继承吗?
 *  不能继承,只能算共用!
 *
 *  父类的静态成员确实可以使用子类类名去访问
 *  但是这不叫继承
 *  只是父子类共用了属于父类的静态成员
 *  静态成员是属于类的,定义在哪个类中就是哪个类的静态成员
 *  它们没有继承的概念,也不考虑它们的继承
 *
 *  3.父类的构造器能不能被子类继承呢?
 *  构造方法不是普通方法，继承过来干嘛呢？构造器是不能被继承的。
 *
 * 何时使用继承？
 * 不要盲目的去使用继承，尤其不要单纯为了复用代码，而使用继承。
 * 使用继承应该严格考虑两个类是否具有"is-a"关系！
 *
 * 教师类继承人类，学生类继承人类是可以理解的，也是符合继承的思想的（is-a）。但是教师类中有姓名、年龄属性，学生类也需要这些成员，能单纯为了复用成员，让学生类继承教师类吗？
 * 显然不行！
 *
 * 在实际开发中，在开发前的会议讨论，需求策划上，一定要认真分析程序中类的关系
 * 避免出现错误的继承。
 *
 * @since 17:30
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son();
        // 'num' has private access in 'com.cskaoyan.javase.oop2._1extends._6restriction.Father'
        // System.out.println(s.num);
        System.out.println(s.getNum());

        System.out.println(Father.staticNum);
        System.out.println(Son.staticNum);
        Son.staticNum = 888;
        System.out.println(Father.staticNum);
    }
}
class Father{
    private int num = 666;
    static int staticNum = 777;

    // 提供一个public的getter方法
    public int getNum(){
        return num;
    }
}
class Son extends Father{

}
